_ptool() {
      local cur prev opts node_names
      COMPREPLY=()
      # COMP_WORDS      类型为数组，存放当前命令行中输入的所有单词
      # COMP_CWORD      类型为整数，当前输入的单词在COMP_WORDS中的索引
      # COMPREPLY       类型为数组，候选的补全结果
      # COMP_WORDBREAKS 类型为字符串，表示单词之间的分隔符
      # COMP_LINE       类型为字符串，表示当前的命令行输入字符
      # COMP_POINT      类型为整数，表示光标在当前命令行的哪个位置
      # compopt -o nospace 设置命令补全后不要多加空格
      cur="${COMP_WORDS[COMP_CWORD]}"      # 当前光标下的单词
      prev="${COMP_WORDS[COMP_CWORD - 1]}" # 当前光标下的上一个单词
      two="${COMP_WORDS[1]}"               # 当前光标下的第二个单词

      #      if echo "${COMP_WORDS[@]}" | grep 'mvn'; then
      #            COMPREPLY=($(compgen -W '-t --test -f --force -p --push' -- $cur))
      #            return 0
      #      elif echo "${COMP_WORDS[@]}" | grep 'branch'; then
      #            COMPREPLY=($(compgen -W '-c --check' -- $cur))
      #            return 0
      #      else
      #            COMPREPLY=($(compgen -W 'mvn branch git' -- ${cur}))
      #      fi

      case ${two} in
      'mvn')
            COMPREPLY=("$(compgen -W '-h --help -t --test --repo --formal -a --all -f --force -p --push -c --clean -r --resolve -d --delete --specify' -- $cur)")
            return 0
            ;;
      'git')
            COMPREPLY=("$(compgen -W '-h --help -b --branch_name -c --check -f --fetch -p --pull -d --delete -D --specify' -- $cur)")
            return 0
            ;;
      'reset_formal')
            COMPREPLY=("$(compgen -W '-h --help --hard --specify' -- $cur)")
            return 0
            ;;
      *)
            COMPREPLY=("$(compgen -W 'mvn git reset_formal -h' -- ${cur})")
            ;;
      esac

}

complete -F _ptool ptool.py
